home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 147
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin
/
docs
/
ippon
/
ver
/
050
/
psearch.c
< prev
next >
Wrap
C/C++ Source or Header
|
1999-06-14
|
1KB
|
85 lines
#include "player.h"
#include "psearch.h"
/* 自機サーチ:敵キャラの座標から見た自機の方向を返す */
unsigned char psearch (signed short ex, signed short ey)
{
signed short dx, dy;
/* 安全のため dx,dy 共に -255~255 の範囲に納める */
/* (そのため座標の差が 256 以上だと誤差が出るが実用上問題ない) */
dx = player->x - ex;
if (dx > 255) {
dx = 255;
} else {
if (dx < -255) {
dx = -255;
}
}
dy = player->y - ey;
if (dy > 255) {
dy = 255;
} else {
if (dy < -255) {
dy = -255;
}
}
if (dx > 0) {
if (dy > 0) {
return (pstable[dx][dy]);
} else {
return (256 - pstable[dx][-dy]);
}
} else {
if (dy > 0) {
return (128 - pstable[-dx][dy]);
} else {
return (128 + pstable[-dx][-dy]);
}
}
}
/* 任意サーチ:敵キャラの座標から見た任意の方向を返す */
unsigned char msearch (signed short ex, signed short ey, signed short mx, signed short my)
{
signed short dx, dy;
/* 安全のため dx,dy 共に -255~255 の範囲に納める */
/* (そのため座標の差が 256 以上だと誤差が出るが実用上問題ない) */
dx = mx - ex;
if (dx > 255) {
dx = 255;
} else {
if (dx < -255) {
dx = -255;
}
}
dy = my - ey;
if (dy > 255) {
dy = 255;
} else {
if (dy < -255) {
dy = -255;
}
}
if (dx > 0) {
if (dy > 0) {
return (pstable[dx][dy]);
} else {
return (256 - pstable[dx][-dy]);
}
} else {
if (dy > 0) {
return (128 - pstable[-dx][dy]);
} else {
return (128 + pstable[-dx][-dy]);
}
}
}